import { DictProps } from '@/typings/typings'
export namespace Table {
	export interface Pageable {
		pageNo: number
		pageSize: number
		totalCount: number
	}
	export interface TableStateProps {
		loading: boolean
		tableData: any[]
		pageable: Pageable
		searchParam: {
			[key: string]: any
		}
		searchInitParam: {
			[key: string]: any
		}
		totalParam: {
			[key: string]: any
		}
		icon?: {
			[key: string]: any
		}
	}
}

export type SearchType =
	| 'input'
	| 'number'
	| 'switch'
	| 'select'
	| 'multipleSelect'
	| 'treeSelect'
	| 'multipleTreeSelect'
	| 'date'
	| 'daterange'
	| 'time'
	| 'timerange'
	| 'datetime'
	| 'datetimerange'

// 列类型，目前就弄展示类型，其他输入类型用插槽自己实现，避免出现修改失败数据不好回滚的问题，插槽显然更灵活
export type ColType = 'text' | 'tag'
export type FixedProp = 'left' | 'right' | null

export type AlignProp = 'left' | 'center' | 'right'

/* ---------------------- 表格 */
export interface ColumnProps {
	// -- 列
	expandEnable?: boolean // 是否可以展开
	childrenList?: ColumnProps[] // 用来实现表格头嵌套
	label: string // 单元格标题（非特殊类型必填）
	prop: string // 对应列内容的字段名
	width?: number | string // 列宽
	minWidth?: number | string // 最小列宽
	sortable?: boolean // 是否可排序（静态排序）
	fixed?: FixedProp // 固定列
	align?: AlignProp // 表格列对齐方式（默认为 center）
	alert?: string // 提示信息
	// -- 列内容
	colEnable?: boolean // 能不能显示列
	colShow?: boolean // 是否显示列
	colType?: ColType // 列类型
	colProps?: Record<string, any> // 列参数，根据 element 文档来，标签自带属性 > props 属性

	// -- 搜索
	searchEnable?: boolean // 是否为搜索项
	searchWidth?: string // 搜索项宽度
	searchOrder?: number // 搜索项排序
	searchType?: SearchType // 搜索项类型
	searchProps?: Record<string, any> // 搜索项参数，根据 element 文档来，标签自带属性 > props 属性
	searchDefault?: any // 搜索项默认值，重置会恢复

	// -- 字典数据
	dict?: string | DictProps[] | (() => Promise<any>) // 字典类型（渲染值的字典），如果搜索是字典类型，会默认从此字段取值
	_dictData?: DictProps[] // 只在内部使用，字典类型（渲染值的字典），如果搜索是字典类型，会默认从此字段取值
	// -- 编辑
	editEnable?: boolean
	// -- 添加
	createEnable?: boolean
	// -- 详情
	detailEnable?: boolean
	// -- 权限标识（判断列是否展示）
	authKey?: string
	// -- 其他，表格列自带参数
	[key: string]: any
}
